java Regexp:在XML文件中替换版本号
好吧,我放弃了,我一直在尝试用ant编写一个regexp来替换属性文件中的版本号。我有以下资料:
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="some.feature.id"
label="Some test feature"
version="1.0.0"
provider-name="Provider">
<plugin
id="test.plugin"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
..... many plugins later....
</feature>
我想要实现的是只替换功能标签的版本号,而不更改文件中xml的版本或插件miriad的版本
我的问题是,我要么匹配得太多,要么匹配得太少。完全匹配“版本”是不够的,因为一切都会改变
考虑到“0.0.0”可以是任何数字,有没有简单的方法只匹配标签中的版本
# 1 楼答案
Perl替换正则表达式看起来像这样
# 2 楼答案
它可能有点重,但由于您处理的是XML,我建议您使用如下XSLT:
# 3 楼答案
假设您正在使用
replaceregexp
任务:我还假设只有一个
<feature>
元素# 4 楼答案
只是为了好玩:一行,使用xpath(!),使用ruby
(我知道:这不是一个regexp,但它是为了说明Will的建议,他说
)
键入“irb”,然后:
需要“rexml/文档”;包括REXML;file=file。新的(“a.xml”);doc=文档。新文件;放置文档;博士。元素。每个(“/feature”){e | e.attributes[“version”]=“1.2.3”};放置文档
它将所有“功能”元素的所有“版本”属性替换为“1.2.3”
# 5 楼答案
那么:
括号中是与版本号匹配的组。移动括号以获得所需的精确匹配
# 6 楼答案
下面的正则表达式可以执行您想要的操作
用人类的话说,这大致意味着
**
感谢Alan M对java lookbehinds的介绍ಠ_ಠ如果将此正则表达式与替换操作一起使用,则它将切换出version=“”属性中的任何内容,并将其设置为替换值。由您提供格式正确的版本号
现在,既然您是使用XML来实现这一点的,那么一个明显的问题是,“为什么不使用XPath?”